package flst.ipiweb.persistance.dao.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import flst.ipiweb.persistance.dao.IModeDeLivraisonDao;
import flst.ipiweb.transverse.IPIException;
import flst.ipiweb.transverse.ModeDeLivraison;

public class ModeDeLivraisonDaoJdbc implements IModeDeLivraisonDao{
	
	private JdbcUtils jdbcUtils = JdbcUtils.getInstance();

	@Override
	/**
	 * Cette méthode permet de lister les modes de livraison en base
	 * @return List<ModeDeLivraison> : la liste des modes de livraison
	 */
	public List<ModeDeLivraison> listerModeDeLivraison() throws IPIException{

		List<ModeDeLivraison> listeModeDeLivraison = new ArrayList<ModeDeLivraison>();
		
		try
		{
			Connection vConnection = jdbcUtils.getConnection();
			Statement vStmt = vConnection.createStatement();
			
			String vRequeteSelect = "SELECT * FROM IPII_DELIVERY_MODES ORDER BY DELIVERY_MODE_ID";
			vStmt.execute(vRequeteSelect);
			ResultSet vRs = vStmt.getResultSet();
			while(vRs.next()){
				ModeDeLivraison deliveryMode = new ModeDeLivraison();
				deliveryMode.setIdMode(vRs.getInt("DELIVERY_MODE_ID"));
				deliveryMode.setLibelle(vRs.getString("DELIVERY_MODE_CODE"));
				deliveryMode.setCoutClientClassique(vRs.getFloat("NORMAL_COSTUMER_COST"));
				deliveryMode.setCoutSuperClient(vRs.getFloat("SUPER_COSTUMER_COST"));
				listeModeDeLivraison.add(deliveryMode);
			}
			
			vStmt.close();
			vConnection.close();
		}
		catch(Exception e)
		{
			throw new IPIException("Exception.dao.technique");
		}
		return listeModeDeLivraison;
	}
	
	@Override
	/**
	 * Cette méthode permet de mettre à jour un mode de livraison en base
	 * @param modeDeLivraison : le mode de livraison à mettre à jour
	 */
	public void updateModeDeLivraison(ModeDeLivraison modeDeLivraison) throws IPIException{
		
		try
		{
			Connection vConnection = jdbcUtils.getConnection();
			String vRequeteInsert = "UPDATE IPII_DELIVERY_MODES SET NORMAL_COSTUMER_COST = ?, SUPER_COSTUMER_COST =? WHERE DELIVERY_MODE_ID = ?";
			PreparedStatement vPs =	vConnection.prepareStatement(vRequeteInsert) ;
			//NORMAL_COSTUMER_ACCESS
			vPs.setDouble(1, modeDeLivraison.getCoutClientClassique());
			//SUPER_COSTUMER_ACCESS
			vPs.setDouble(2, modeDeLivraison.getCoutSuperClient());
						
			//mode_id
			vPs.setInt(3, modeDeLivraison.getIdMode());

			vPs.executeUpdate();
			
			vPs.close();
			vConnection.close();
		}
		catch (Exception e) {
			throw new IPIException("ModeDeLivraisonException.update.technique");
		}
	}
}
